Ext.ns('journal.ux');

/*
 * ! Ext JS Library 3.1.1 Copyright(c) 2006-2010 Ext JS, LLC licensing@extjs.com
 * http://www.extjs.com/license
 */
/**
 * @class Ext.ux.TabCloseMenu
 * @extends Object Plugin (ptype = 'tabclosemenu') for adding a close context
 *          menu to tabs.
 * 
 * @ptype tabclosemenu
 */
journal.ux.TabCloseMenu = function() {
  var tabs, menu, ctxItem;
  this.init = function(tp) {
    tabs = tp;
    tabs.on('contextmenu', onContextMenu);
  };

  function onContextMenu(ts, item, e) {
    if (!menu) { // create context menu on first right click
      menu = new Ext.menu.Menu({
            items : [{
                  id : tabs.id + '-close',
                  text : 'Close Tab',
                  handler : function() {
                    ctxItem.fireEvent('remove', ctxItem);
                    tabs.remove(ctxItem);
                  }
                }, {
                  id : tabs.id + '-close-others',
                  text : 'Close Other Tabs',
                  handler : function() {
                    tabs.items.each(function(item) {
                          if (item.closable && item != ctxItem) {
                            item.fireEvent('remove', item);
                            tabs.remove(item);
                          }
                        });
                  }
                }, {
                  id : tabs.id + '-close-all',
                  text : 'Close All Tabs',
                  handler : function() {
                    tabs.items.each(function(item) {
                          if (item.closable) {
                            item.fireEvent('remove', item);
                            tabs.remove(item);
                          }
                        });
                  }
                }]
          });
    }
    ctxItem = item;
    var items = menu.items;
    items.get(tabs.id + '-close').setDisabled(!item.closable);
    var disableOthers = true;
    tabs.items.each(function() {
          if (this != item && this.closable) {
            disableOthers = false;
            return false;
          }
        });
    items.get(tabs.id + '-close-others').setDisabled(disableOthers);
    e.stopEvent();
    menu.showAt(e.getPoint());
  }
};

Ext.preg('journal.ux.TabCloseMenu', journal.ux.TabCloseMenu);
